

//汉诺塔游戏，设汉诺塔一共n层，则需要挪动的次数为2^n - 1次
public class TowerofHanoi {
    public static void move(char pos1,char pos2){
        System.out.print(pos1 + "->" + pos2 + ' ');
    }//利用递归挪动盘子

    //A 起始位置
    //B 中转位置
    //C 目标位置
    //num 盘子
    public static void hanoi(int num,char A,char B,char C){
        if( num == 1){
            move(A,C);
        }else{
            hanoi(num - 1,A,C,B);
            move(A,C);
            hanoi(num - 1,B,A,C);
        }
    }//先挪走n - 1个：从A上借助C挪到B上
     //挪剩下n - 1个:从B上借助A挪到C上
     //按递归挪
    public static void main(String[] args) {
        char plate1 = 'A';
        char plate2 = 'B';
        char plate3 = 'C';

        hanoi(1,plate1,plate2,plate3);
        System.out.println();
        hanoi(2,plate1,plate2,plate3);
        System.out.println();
        hanoi(3,plate1,plate2,plate3);
        System.out.println();
        hanoi(4,plate1,plate2,plate3);
    }
}
